Skip to content

修复 OpenAI 会话锚点误续到旧对话#1740

Open
gebdalaoli-arch wants to merge 5 commits intoWei-Shaw:mainfrom
gebdalaoli-arch:codex/fix-openai-conversation-anchor
Open

修复 OpenAI 会话锚点误续到旧对话#1740
gebdalaoli-arch wants to merge 5 commits intoWei-Shaw:mainfrom
gebdalaoli-arch:codex/fix-openai-conversation-anchor

Conversation

@gebdalaoli-arch
Copy link
Copy Markdown

变更说明

本次修复针对 Codex / OpenAI Responses 场景中,偶发返回上一轮提问回答的问题。

核心原因是 OpenAI 会话锚点优先级过于偏向 session_id,当客户端在同一个稳定 session_id 下切换到新的 conversation_id 时,服务端仍可能复用旧的会话状态、旧的 turn state 或旧的上游续链锚点,导致新问题被错误续接到旧对话。

修复内容

  • 将 OpenAI 内部 GenerateSessionHash 的优先级调整为:
    • conversation_id
    • session_id
    • prompt_cache_key
    • 内容回退
  • 将非透传 WSv2 上游握手头中的 session_id 收敛为优先跟随 conversation_id
  • 将 OAuth 自动透传路径中的 session_id 也收敛为优先跟随 conversation_id
  • 将 /responses/compact 路径的 session 解析也统一为 conversation_id 优先
  • 补充回归测试,覆盖以下风险场景:
    • 同一稳定 session_id 下切换 conversation_id 不应命中同一 sticky session
    • 新 conversation_id 不应继承旧 urn_state
    • 透传路径和 compact 路径也应遵循相同优先级

验证结果

已在本地通过以下测试:

�ash go test ./internal/service go test ./internal/handler

影响范围

主要影响 OpenAI 相关的会话锚点选择逻辑,不改变正常请求的业务语义;
修复后在存在 conversation_id 的情况下,会更保守地按对话粒度隔离状态,降低新问题误续到旧对话的概率。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant